package com.xhorse.lockplatform.comm.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author Think
 */
public final class LogUtil {
    private static final String LOGGER_NAME_DEFAULT = "defaultLogger";
    private static final String LOGGER_NAME_WEB = "webLogger";

    private LogUtil(){}

    /**
     * 自定义线程范围内共享的对象
     * 即它会针对不同线程分别创建独立的对象，此时每个线程得到的将是自己的实例，各线程间得到的实例没有任何关联
     */
    private static ThreadLocal<Logger> currentLoggerMap = new ThreadLocal<>();

    /**
     * 定义日志记录器
     */
    private static Logger defaultLogger = LoggerFactory.getLogger(LOGGER_NAME_DEFAULT);
    private static Logger webLogger = LoggerFactory.getLogger(LOGGER_NAME_WEB);

    /**
     * 获取当前线程中的日志记录器
     * <p>
     *     每个线程调用全局的ThreadLocal.set()方法
     *     相当于在其内部的Map中增加一条记录，key是各自的线程，value是各自set()的值
     *     取的时候直接ThreadLocal.get()即可
     * </p>
     */
    public static Logger getLogger() {
        Logger logger = currentLoggerMap.get();
        if(null == logger){
            return defaultLogger;
        }else{
            return logger;
        }
    }

    /**
     * 获取Web端日志记录器
     */
    public static Logger getWebLogger() {
        Logger logger = currentLoggerMap.get();
        if(null!=logger && LOGGER_NAME_WEB.equals(logger.getName())){
            return logger;
        }
        currentLoggerMap.set(webLogger);
        return webLogger;
    }

}